/**
* @project admin-go-api
* @name sysMenu
* @descriptions 菜单相关模型
* @author 寒锋
* @date 2023-12-19 14:18:09
 */

package entity

import "admin-go-api/common/util"

const (
	TypeCatalog         = 1 // 目录
	TypeMenu            = 2 // 菜单
	TypeBtn             = 3 // 按钮
	MenuStatusForbidden = 1 // 禁用
	MenuStatusNormal    = 2 // 启用
)

// SysMenu 菜单结构体
type SysMenu struct {
	MenuId     uint       `gorm:"column:menu_id;autoIncrement;primaryKey;NOT NULL;comment:'菜单id'" json:"menu_id"`
	ParentId   uint       `gorm:"column:parent_id;NOT NULL;default:0;comment:'父级'" json:"parent_id"`
	MenuName   string     `gorm:"column:menu_name;varchar(100);NOT NULL;default:'';comment:'菜单名称'" json:"menu_name"`
	Icon       string     `gorm:"column:icon;varchar(300);NOT NULL;default:'';comment:'图标'" json:"icon"`
	Value      string     `gorm:"column:value;varchar(100);NOT NULL;default:'';comment:'权限值'" json:"value"`
	MenuType   uint       `gorm:"column:menu_type;NOT NULL;default:1;comment:'菜单类型：1->目录；2->菜单；3->按钮（接口绑定权限'" json:"menu_type"`
	Url        string     `gorm:"column:url;varchar(300);NOT NULL;default:'';comment:'菜单url'" json:"url"`
	MenuStatus uint       `gorm:"column:menu_status;int(3);NOT NULL;default:1;comment:'启用状态；1->禁用；2->启用'" json:"menu_status"`
	Sort       uint       `gorm:"column:sort;NOT NULL;default:0;comment:'排序'" json:"sort"`
	CreateTime util.HTime `gorm:"column:create_time;comment:'创建时间';NOT NULL" json:"create_time"`
	Children   []SysMenu  `gorm:"-" json:"children" `
}

func (SysMenu) TableName() string {
	return "sys_menu"
}

// SysMenuIdDto id参数
type SysMenuIdDto struct {
	MenuId uint `json:"menu_id"`
}

// SysMenuVo 菜单下拉对象
type SysMenuVo struct {
	MenuId   uint   `json:"menu_id"`
	ParentId uint   `json:"parent_id"`
	MenuName string `json:"menu_name"`
}

// MenuSvo 菜单级vo
type MenuSvo struct {
	MenuName string `json:"menu_name"`
	Icon     string `json:"icon"`
	Url      string `json:"url"`
}

// LeftMenuVo 左侧菜单vo
type LeftMenuVo struct {
	MenuId      uint      `json:"menu_id"`
	MenuName    string    `json:"menu_name"`
	Icon        string    `json:"icon"`
	Url         string    `json:"url"`
	MenuSvoList []MenuSvo `json:"menuSvoList"` // 菜单列表
}

// ValueVo 权限vo
type ValueVo struct {
	Value string `json:"value"`
}
